#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//结构体变量的指针成员与浅拷贝神拷贝的操作
struct student
{
    char name[20];//数组
    int age;
};

struct man
{
    char *name;//指针
    int age;
};



int main()
{
    struct student st;
    struct student st1;
    strcpy(st.name, "张三");//字符串赋值
    st.age = 30;
    st1 = st;
    printf("st.name = %s, st.age = %d\n", st.name, st.age);
    printf("st1.name = %s, st1.age = %d\n", st1.name, st1.age);

    struct man m;//m里面的name是空指针，不能直接复制，需要先分配空间给它
    struct man m1;//m里面的name是空指针，不能直接复制，需要先分配空间给它
    m.name = calloc(20, sizeof(char));//分配地址给m.name
    strcpy(m.name, "李四");
    m.age = 40;
    //m1 = m;//浅拷贝
    //深拷贝
    //先给m1.name一块堆内存，然后再内存拷贝
    //这样m1.name和m.name就是两块内存了，不会互相干扰
    m1.name = calloc(20, sizeof(char));
    m1.age = m.age;
    memcpy(m1.name, m.name, 20);

    printf("m1.name = %s, m1.age = %d\n", m1.name, m1.age);
    free(m1.name);

    printf("m.name = %s, m.age = %d\n", m.name, m.age);
    free(m.name);
    
    return 0;
}

